<?php
defined ( 'BASEPATH' ) or exit ( 'No direct script access allowed' );

// if ( ! class_exists('CI_Form_validation',FALSE) ) {
// 	require_once( BASEPATH.'libraries/Form_validation.php' );
// }

/** 
 * 验证类
 */
class Validation  {
	
// 	private $input = NULL;
	
// 	public function __construct($rules=array()){
// 		$this->input = $_REQUEST;
// 	}
	
// 	public function setRules($field,$rules){
// // 		$rules = preg_split('/\|(?![^\[]*\])/', $rules);
// // 		pr($rules);
// // 		$item = array('field'=>$field);
		
// 		$rules = explode('|', $rules) ; 
// // 		foreach($rules as $rule){
// // 			preg_match('/.*\[?/', $subject)
// // 		}
// 		pr($rules);
// 	}
	
// 	public function run(){
		
// 	}
	
	/**
	 * 签名验证
	 * @return boolean
	 */
	static function checkSign(){
		
		if ( defined('IS_TEST') && IS_TEST ) {
			return TRUE;
		}
		
		$signTable = 'hs_used_sign';
		$input = $_REQUEST;
		if( !isset($input['sign']) || !isset($input['rqst']) ){
			return FALSE;
		}
		// 获取签名结果
		$inputSign = $input['sign'];
		$rqst      = $input['rqst'];
		// 从数据库验证该签名是否使用过
// 		$CI = &get_instance();
// 		$CI->load->database();
// 		$isUsed = (bool)$CI->db->select('*')
// 						->from($signTable)
// 						->where('sign',$inputSign)
// 						->limit(1)
// 						->get()
// 						->num_rows();
// 		if( $isUsed ){
// 			return FALSE;
// 		}
		unset($input['sign']);
		unset($input['rqst']);
		$sign = self::getSign($input, $rqst);
		if( strcmp($inputSign, $sign)!==0 ){
			return FALSE;
		}
		// 纪录该签名到数据库
// 		$sql = "INSERT IGNORE ".$signTable." (sign) VALUES (?)";
// 		$res = $CI->db->query($sql,$sign);
// 		if( ! $CI->db->affected_rows() ){
// 			return FALSE;
// 		}
		return TRUE;
	}
	/**
	 * 计算签名
	 * @param array $input
	 * @param float $rqst
	 * @return string
	 */
	static function getSign($input,$rqst){
		// 密匙(与APP端一致)
		$key = '34bddf293bebeba6d314209d3ebe6a94';
		$rqst -= 1314520;
		unset($input['nickname']);
		ksort($input);
		$str = '';
		foreach ($input as $k=>$v){
			$str.=$k.'='.$v.'&';
		}
		$str.='key='.$key.'&t='.$rqst;
		$sign = md5($str);
		
// 		$CI = &get_instance();
// 		$CI->apiOutput->put('signstr',$str)
// 					->put('sign',strtoupper($sign));
		
// 		echo $str,"<BR/>";
// 		echo strtoupper($sign);
// 		die;
		
		return strtoupper($sign);
	}
	
	
}

